// pages/ai/ai.js
Page({
  data: {
    messages: [],
    inputValue: '',
    isLoading: false,
    scrollTop: 0
  },

  // 获取当前时间
  getCurrentTime() {
    const now = new Date()
    return `${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}`
  },

  onLoad(options) {
    // 初始化对话，添加欢迎消息
    const welcomeMessage = '您好！我是AI智能助手，专门帮助您解决产品相关问题。您可以询问安装、使用、故障排除等问题。'
    this.setData({
      messages: [
        {
          type: 'ai',
          content: welcomeMessage,
          richContent: this.parseMarkdown(welcomeMessage),
          time: this.getCurrentTime()
        }
      ]
    })
  },

  // 解析markdown文本为富文本节点
  parseMarkdown(text) {
    if (!text) return []
    
    const nodes = []
    const lines = text.split('\n')
    
    for (let i = 0; i < lines.length; i++) {
      const line = lines[i].trim()
      
      if (!line) {
        // 空行
        nodes.push({
          name: 'div',
          attrs: { style: 'height: 8px;' }
        })
        continue
      }
      
      // 标题处理
      if (line.startsWith('###### ')) {
        nodes.push({
          name: 'div',
          attrs: { style: 'font-size: 12px; font-weight: bold; margin: 8px 0 4px 0; color: #111827;' },
          children: [{ type: 'text', text: line.substring(7) }]
        })
      } else if (line.startsWith('##### ')) {
        nodes.push({
          name: 'div',
          attrs: { style: 'font-size: 13px; font-weight: bold; margin: 8px 0 4px 0; color: #111827;' },
          children: [{ type: 'text', text: line.substring(6) }]
        })
      } else if (line.startsWith('#### ')) {
        nodes.push({
          name: 'div',
          attrs: { style: 'font-size: 14px; font-weight: bold; margin: 10px 0 6px 0; color: #111827;' },
          children: [{ type: 'text', text: line.substring(5) }]
        })
      } else if (line.startsWith('### ')) {
        nodes.push({
          name: 'div',
          attrs: { style: 'font-size: 15px; font-weight: bold; margin: 10px 0 6px 0; color: #111827;' },
          children: [{ type: 'text', text: line.substring(4) }]
        })
      } else if (line.startsWith('## ')) {
        nodes.push({
          name: 'div',
          attrs: { style: 'font-size: 16px; font-weight: bold; margin: 12px 0 8px 0; color: #111827;' },
          children: [{ type: 'text', text: line.substring(3) }]
        })
      } else if (line.startsWith('# ')) {
        nodes.push({
          name: 'div',
          attrs: { style: 'font-size: 18px; font-weight: bold; margin: 16px 0 12px 0; color: #111827;' },
          children: [{ type: 'text', text: line.substring(2) }]
        })
      }
      // 分隔线处理
      else if (line === '—' || line === '---') {
        nodes.push({
          name: 'div',
          attrs: { style: 'height: 1px; background: #e5e7eb; margin: 12px 0;' }
        })
      }
      // 无序列表项处理（* 或 - 开头）
      else if (/^[\*\-\+]\s/.test(line)) {
        const content = line.replace(/^[\*\-\+]\s/, '')
        nodes.push({
          name: 'div',
          attrs: { style: 'margin: 4px 0; padding-left: 16px; position: relative;' },
          children: [
            {
              name: 'span',
              attrs: { style: 'position: absolute; left: 0; color: #6b7280; font-size: 16px;' },
              children: [{ type: 'text', text: '•' }]
            },
            {
              name: 'span',
              attrs: { style: 'display: block;' },
              children: this.parseInlineMarkdown(content)
            }
          ]
        })
      }
      // 有序列表项处理
      else if (/^\d+\.\s/.test(line)) {
        const content = line.replace(/^\d+\.\s/, '')
        nodes.push({
          name: 'div',
          attrs: { style: 'margin: 4px 0; padding-left: 16px; position: relative;' },
          children: [
            {
              name: 'span',
              attrs: { style: 'position: absolute; left: 0; color: #6b7280;' },
              children: [{ type: 'text', text: line.match(/^\d+\./)[0] }]
            },
            {
              name: 'span',
              attrs: { style: 'display: block;' },
              children: this.parseInlineMarkdown(content)
            }
          ]
        })
      }
      // 普通段落处理
      else {
        nodes.push({
          name: 'div',
          attrs: { style: 'margin: 6px 0; line-height: 1.5;' },
          children: this.parseInlineMarkdown(line)
        })
      }
    }
    
    return nodes
  },

  // 解析行内markdown
  parseInlineMarkdown(text) {
    const nodes = []
    let currentText = text
    let nodeIndex = 0
    
    // 处理粗体 **text**
    const boldRegex = /\*\*(.*?)\*\*/g
    let lastIndex = 0
    let match
    
    while ((match = boldRegex.exec(currentText)) !== null) {
      // 添加粗体前的文本
      if (match.index > lastIndex) {
        nodes.push({
          type: 'text',
          text: currentText.substring(lastIndex, match.index)
        })
      }
      
      // 添加粗体文本
      nodes.push({
        name: 'span',
        attrs: { style: 'font-weight: bold;' },
        children: [{ type: 'text', text: match[1] }]
      })
      
      lastIndex = match.index + match[0].length
    }
    
    // 添加剩余文本
    if (lastIndex < currentText.length) {
      nodes.push({
        type: 'text',
        text: currentText.substring(lastIndex)
      })
    }
    
    // 如果没有匹配到任何markdown，返回原文本
    if (nodes.length === 0) {
      nodes.push({ type: 'text', text: currentText })
    }
    
    return nodes
  },

  // 处理输入变化
  onInputChange(e) {
    console.log('onInputChange called, value:', e.detail.value)
    this.setData({
      inputValue: e.detail.value
    })
  },

  // 发送快捷问题
  sendQuickQuestion(e) {
    const question = e.currentTarget.dataset.question
    this.setData({
      inputValue: question
    })
    this.sendMessage()
  },

  // 发送消息
  sendMessage() {
    console.log('sendMessage called, inputValue:', this.data.inputValue)
    const message = this.data.inputValue.trim()
    console.log('trimmed message:', message)
    if (!message) {
      wx.showToast({
        title: '请输入消息',
        icon: 'none'
      })
      return
    }

    // 添加用户消息
    const userMessage = {
      type: 'user',
      content: message,
      time: this.getCurrentTime(),
      richContent: this.parseMarkdown(message)
    }

    this.setData({
      messages: [...this.data.messages, userMessage],
      inputValue: '',
      isLoading: true
    })

    // 滚动到底部
    this.scrollToBottom()

    // 调用DeepSeek API
    this.callDeepSeekAPI(message)
  },

  // 调用DeepSeek API
  async callDeepSeekAPI(userMessage) {
    try {
      // 临时模拟响应（用于演示，请替换为真实API调用）
      const isDemoMode = false; // 设置为false以使用真实API
      
      if (isDemoMode) {
        // 模拟API响应
        await new Promise(resolve => setTimeout(resolve, 1500)); // 模拟网络延迟
        
        const demoResponses = {
          '如何安装产品': '产品安装步骤：\n1. 检查包装完整性\n2. 阅读安装说明书\n3. 准备必要工具\n4. 按照步骤进行安装\n5. 测试功能是否正常\n\n如有疑问，请查看详细安装视频或联系客服。',
          '产品故障排除': '常见故障排除方法：\n1. 检查电源连接\n2. 重启设备\n3. 检查网络连接\n4. 查看错误代码\n5. 联系技术支持\n\n建议先尝试基础排查，如问题持续请提供详细错误信息。',
          '产品使用技巧': '使用技巧分享：\n1. 定期清洁保养\n2. 正确操作流程\n3. 合理设置参数\n4. 注意安全事项\n5. 充分利用功能\n\n更多技巧请参考产品手册或观看教学视频。',
          '产品维护保养': '维护保养建议：\n1. 定期清洁表面\n2. 检查连接线\n3. 更新软件版本\n4. 备份重要数据\n5. 专业维护服务\n\n建议每3-6个月进行一次全面检查。'
        };
        
        const response = demoResponses[userMessage] || '感谢您的提问！作为AI助手，我专门帮助解决产品相关问题。请提供更具体的问题描述，我会为您提供详细的解答和建议。如需人工客服，请在工作时间联系我们的技术支持团队。';
        
        const aiResponse = {
          type: 'ai',
          content: response,
          time: this.getCurrentTime(),
          richContent: this.parseMarkdown(response)
        };

        this.setData({
          messages: [...this.data.messages, aiResponse],
          isLoading: false
        });

        this.scrollToBottom();
        return;
      }

      // 真实API调用（需要有效的API密钥）
      const conversationHistory = this.data.messages
        .filter(msg => msg.type === 'user' || msg.type === 'ai')
        .slice(-10) // 只保留最近10条对话
        .map(msg => ({
          role: msg.type === 'user' ? 'user' : 'assistant',
          content: msg.content
        }))

      const response = await new Promise((resolve, reject) => {
        wx.request({
          url: 'https://api.deepseek.com/v1/chat/completions',
          method: 'POST',
          header: {
            'Content-Type': 'application/json',
            'Authorization': 'Bearer sk-bab1e4f901344202b2f514efe1200128' // 请替换为您的真实API Key
          },
          data: {
            model: 'deepseek-chat',
            messages: [
              {
                role: 'system',
                content: '你是一个专业的产品说明书AI助手。你的任务是帮助用户解决产品相关问题，包括安装、使用、故障排除、维护保养等。请用简洁、专业、易懂的语言回答用户问题。如果遇到不确定的问题，请建议用户查看产品说明书或联系客服。'
              },
              ...conversationHistory
            ],
            max_tokens: 1000,
            temperature: 0.7,
            stream: false
          },
          success: resolve,
          fail: reject
        })
      })

      if (response.statusCode === 200 && response.data.choices && response.data.choices.length > 0) {
        const aiMessage = response.data.choices[0].message.content
        
        const aiResponse = {
          type: 'ai',
          content: aiMessage,
          time: this.getCurrentTime(),
          richContent: this.parseMarkdown(aiMessage)
        }

        this.setData({
          messages: [...this.data.messages, aiResponse],
          isLoading: false
        })

        // 滚动到底部
        this.scrollToBottom()
      } else {
        throw new Error(`API调用失败: ${response.statusCode}`)
      }
    } catch (error) {
      console.error('API调用错误:', error)
      
      let errorMessage = '网络连接异常，请检查网络后重试'
      if (error.message.includes('401')) {
        errorMessage = 'API密钥无效，请联系管理员'
      } else if (error.message.includes('429')) {
        errorMessage = '请求过于频繁，请稍后再试'
      } else if (error.message.includes('500')) {
        errorMessage = '服务器内部错误，请稍后重试'
      }

      const errorResponse = {
        type: 'ai',
        content: `抱歉，${errorMessage}。您可以尝试重新提问或联系客服获取帮助。`,
        time: this.getCurrentTime(),
        richContent: this.parseMarkdown(`抱歉，${errorMessage}。您可以尝试重新提问或联系客服获取帮助。`)
      }

      this.setData({
        messages: [...this.data.messages, errorResponse],
        isLoading: false
      })

      wx.showToast({
        title: errorMessage,
        icon: 'none',
        duration: 3000
      })

      // 滚动到底部
      this.scrollToBottom()
    }
  },

  // 滚动到底部
  scrollToBottom() {
    setTimeout(() => {
      this.setData({
        scrollTop: 99999
      })
    }, 100)
  },

  // 清空对话
  clearChat() {
    wx.showModal({
      title: '确认清空',
      content: '确定要清空所有对话吗？',
      success: (res) => {
        if (res.confirm) {
          this.setData({
            messages: [
              {
                type: 'ai',
                content: '对话已清空，有什么可以帮助您的吗？',
                time: this.getCurrentTime(),
                richContent: this.parseMarkdown('对话已清空，有什么可以帮助您的吗？')
              }
            ],
            scrollTop: 0
          })
        }
      }
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})